package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.ArrayList;

/*
    库管类
        优化方案: 使用集合容器替换数组容器
 */
public class OtherStudentDao implements BaseStudentDao{

    //1. 创建一个集合,用来充当数据仓库
    private static ArrayList<Student> stuArray = new ArrayList<Student>();

    //通过静态代码块的设计让系统在加载StudentDao.class的时候自动执行静态代码块代码，初始化两个学生对象到数组容器中
    static {
        //读取文件中保存的记录数据,将文件中的数据封装成学生对象,将封装好的学生对象存入集合
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("itheima-edu-info-manager\\stu.txt"));
            //将文件中的数据读取到一个大的字节数组里
            byte[] bys = new byte[1024];
            int len = bis.read(bys);
            //将读取到的字节数组作为构造参数,创建字符串
            String stuStr = new String(bys,0,len);
            /*
                heima001,张三,23,1999-11-11
                heima002,李四,23,1999-11-11
             */
            String[] stuStrArray = stuStr.split(System.lineSeparator());
            for (String s : stuStrArray) {
                String[] split = s.split(",");
                Student stu = new Student(split[0],split[1],split[2],split[3]);
                stuArray.add(stu);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //添加学生
    public boolean addStudent(Student stu) {
        return stuArray.add(stu);
    }

    //查询所有学生对象并返回
    public Student[] findAllStudent() {
        //1. 定义一个数组,用来返回集合中的数据
        return stuArray.toArray(new Student[stuArray.size()]);
    }

    //删除学生
    public void deleteStudent(String delId) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(delId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.remove(index);
    }

    //修改学生
    public void updateStudent(String updateId, Student stu) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(updateId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.set(index,stu);
    }

    //获取指定学号在数组中的索引位置
    public int getIndex(String updateId) {
        // 1.1 先假设delId在数组中不存在
        int index = -1;

        //1.2 遍历数组容器
        for (int i = 0; i < stuArray.size(); i++) {
            //1.3 获取当前索引位置的元素
            Student stu = stuArray.get(i);
            //1.4 将stu的id和delId进行匹配
            if (stu != null && stu.getSid().equals(updateId)){
                index = i;
                break;
            }
        }
        return index;
    }
}
